perm filename POTRED[AL,HE] blob
sn#116830 filedate 1977-02-21 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00004 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE POTRED
C00007 00003 "GETAD" - SAMPLES A/D IN SPACEWAR MODE
C00010 00004 INDICATE A/D ERROR: 1=136 CONFLICTS, 2=MISSED DATA, 3=A/D HUNG
C00013 ENDMK
C⊗;
TITLE POTRED
INTERNAL POTRED
;PROGRAM TO SAMPLE THE FOUR POTS IN THE BOX BELOW THE ARM TABLE.
;A SAIL CALL TO THIS PROCEDURE MUST BE IN THE FOLLOWING FORM-
;
; POTRED(INTEGER ARRAY POTS[1:4]);
;
;DEFINITIONS
P←17 ;ADDRESS STACK
AD←424 ;A TO D ADDRESS
D136←204 ;136 ADDRESS
RATE←0 ;SPACEWAR EXECUTION INTERVAL
;COMMAND INPUT SECTION
POTRED: MOVEM 16,HOLD+16 ;SAVE ALL THE REGISTERS
HRRZI 16,HOLD
BLT 16,HOLD+15
MOVE 1,-1(P) ;GET THE ADDR. OF THE ARGUMENT
MOVEM 1,DPT ;SAVE POINTER
SETZM ERR ;RESET A/D ERROR FLAG
SETZM LFT ;RESET DONE FLAG
MOVE [200000+RATE,,GETAD] ;PDP6 SPACEWAR MODE
SPCWGO ;TURN ON SPCWR MODE
SKIPN LFT ;CHECK FOR SAMPLING DONE
JRST .-1 ;NO GO CHECK AGAIN
SPCWAR 636367 ;TERMINATE SPACEWAR MODE
SUB P,[2(2)] ;INDICATE ARGUMENTS POPPED OFF STACK
SKIPE ERR ;CHECK A/D ERROR FLAGS
JRST BADAD
HRLZI HOLD ;RESTORE REGISTERS
BLT 15
MOVE 16,HOLD+16
JRST @2(P) ;RETURN
;"GETAD" - SAMPLES A/D IN SPACEWAR MODE
;
GETAD: SKIPE LFT ;CHECK FOR ALL SAMPLES COLLECTED
DISMIS ;NO MORE, EXIT
MOVE 10,DPT ;GET DATA POINTER
MOVEI 2,4 ;SET LOOP TO READ FOUR POTS
MOVEI 5,120030 ;FIRST READ FROM POT AT ADDR 12
ADLP: CONI D136,1 ;CHECK FOR CONFLICTS
ANDI 1,7
JUMPN 1,[ MOVEI 3,1 ;SET ERR=1 AND EXIT
ER1: MOVEM 3,ERR
SETZM LFT ;TERMINATE SAMPLING LOOP
DISMIS ]
MOVEI 4,8 ;SET MISSED DATA COUNT
TURNON: CONO D136,4250 ;TURNON THE 136
CONO AD,@5 ;TURN ON THE A/D, CHANNEL IN REG 5
MOVEI 3,200 ;SET DEVICE HUNG COUNT
CONSO D136,1000 ;WAIT FOR 136 DONE
SOJGE 3,.-1 ;COUNT DOWN WHILE WAITING
JUMPL 3,[MOVEI 3,3 ;EXIT IF A/D HUNG, SET FLAG
JRST ER1]
CONSZ D136,10000 ;CHECK FOR MISSED DATA
JRST [ CONO AD,4000 ;TURN OFF THE A/D
SOJG 4,TURNON ;TRY AGAIN?
MOVEI 3,2 ;NO,SET FLAGS AND EXIT
JRST ER1 ]
DATAI D136,6 ;READ A POT
CONO AD,4000 ;TURN OFF THE A/D
ADDI 5,10000 ;POINT TO NEXT POT
LSHC 6,-14 ;GET THE THIRD READING
ASH 7,-30
MOVE 11,7 ;SAVE THE VALUE
LSHC 6,-14 ;GET THE SECOND READING
ASH 7,-30
ADD 7,11 ;AVERAGE THE VALUES
ASH 7,-1
MOVEM 7,(10) ;RETURN THE VALUE
AOJ 10, ;INCREMENT ARRAY POINTER
SOJN 2,ADLP ;CHECK FOR MORE POTS TO READ
AOS LFT ;DECREMENT SAMPLE COUNTER
DISMIS
;INDICATE A/D ERROR: 1=136 CONFLICTS, 2=MISSED DATA, 3=A/D HUNG
BADAD: MOVE 1,ERR ;GET FLAGS
LSH 1,1 ;POSITION FOR OUTPUT
ORM 1,COM4+2 ;OR TO OUTPUT STRING
OUTSTR COM4 ;TYPE OUT MESSAGE
JRST @2(P)
;LOCAL STORAGE AREA
DPT: 0
HOLD: BLOCK 20
LFT: 0
ERR: 0
COM4: ASCIZ/
A-D ERROR = 0/
END